---
sidebar_position: 4
description: Learn about the special objects in runtime, their limitations, and
  how to work with them effectively.
keywords:
  - special objects
  - runtime
  - RAM optimization
  - prototype manipulation
  - JavaScript limitations
---
# Special objects

To save RAM certain objects are treated specially by the runtime,
and as a consequence you cannot attach arbitrary properties to them, manipulate their prototypes freely, etc.

-   functions (built-in, top-level, nested (closures))
-   static buffers created with the `hex` template literals (eg., `` hex `00 11 22` ``)
-   strings and numbers (`"".myProp === undefined` as expected,
    but `"".myProp = val` throws instead of being ignored as in JS)
-   `ds.Fiber`
-   `ds.Register`, `ds.Event` - members of `ds.Role`

It **is OK** to add properties to arrays (`[].myProp = 1`), dynamically allocated buffers,
and of course regular objects and class instances.

The prototype manipulation is limited also for arrays and buffers.
